package com.zenithmind.document.pojo.query;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 文档分享查询DTO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "文档分享查询DTO")
public class DocumentShareQueryDTO {

    /**
     * 页码
     */
    @Schema(description = "页码")
    private Integer current = 1;

    /**
     * 每页大小
     */
    @Schema(description = "每页大小")
    private Integer size = 10;

    /**
     * 关键词搜索
     */
    @Schema(description = "关键词搜索")
    private String keyword;

    /**
     * 文档ID
     */
    @Schema(description = "文档ID")
    private String documentId;

    /**
     * 文档ID列表
     */
    @Schema(description = "文档ID列表")
    private List<String> documentIds;

    /**
     * 分享标题
     */
    @Schema(description = "分享标题")
    private String shareTitle;

    /**
     * 分享码
     */
    @Schema(description = "分享码")
    private String shareCode;

    /**
     * 分享类型（1-公开链接，2-密码链接，3-指定用户，4-指定群组）
     */
    @Schema(description = "分享类型（1-公开链接，2-密码链接，3-指定用户，4-指定群组）")
    private Integer shareType;

    /**
     * 分享类型列表
     */
    @Schema(description = "分享类型列表")
    private List<Integer> shareTypes;

    /**
     * 权限类型（1-只读，2-下载，3-编辑，4-管理）
     */
    @Schema(description = "权限类型（1-只读，2-下载，3-编辑，4-管理）")
    private Integer permissionType;

    /**
     * 权限类型列表
     */
    @Schema(description = "权限类型列表")
    private List<Integer> permissionTypes;

    /**
     * 分享状态（0-禁用，1-启用，2-已过期）
     */
    @Schema(description = "分享状态（0-禁用，1-启用，2-已过期）")
    private Integer status;

    /**
     * 分享状态列表
     */
    @Schema(description = "分享状态列表")
    private List<Integer> statuses;

    /**
     * 创建者ID
     */
    @Schema(description = "创建者ID")
    private String creatorId;

    /**
     * 创建者ID列表
     */
    @Schema(description = "创建者ID列表")
    private List<String> creatorIds;

    /**
     * 创建者名称
     */
    @Schema(description = "创建者名称")
    private String creatorName;

    /**
     * 分享给用户ID
     */
    @Schema(description = "分享给用户ID")
    private String shareUserId;

    /**
     * 分享给群组ID
     */
    @Schema(description = "分享给群组ID")
    private String shareGroupId;

    /**
     * 是否允许转发（0-否，1-是）
     */
    @Schema(description = "是否允许转发（0-否，1-是）")
    private Integer allowForward;

    /**
     * 是否需要登录（0-否，1-是）
     */
    @Schema(description = "是否需要登录（0-否，1-是）")
    private Integer requireLogin;

    /**
     * 是否水印保护（0-否，1-是）
     */
    @Schema(description = "是否水印保护（0-否，1-是）")
    private Integer watermarkProtection;

    /**
     * 最小访问次数
     */
    @Schema(description = "最小访问次数")
    private Integer minAccessCount;

    /**
     * 最大访问次数
     */
    @Schema(description = "最大访问次数")
    private Integer maxAccessCount;

    /**
     * 最小下载次数
     */
    @Schema(description = "最小下载次数")
    private Integer minDownloadCount;

    /**
     * 最大下载次数
     */
    @Schema(description = "最大下载次数")
    private Integer maxDownloadCount;

    /**
     * 过期时间范围-开始
     */
    @Schema(description = "过期时间范围-开始")
    private LocalDateTime expireTimeFrom;

    /**
     * 过期时间范围-结束
     */
    @Schema(description = "过期时间范围-结束")
    private LocalDateTime expireTimeTo;

    /**
     * 创建时间范围-开始
     */
    @Schema(description = "创建时间范围-开始")
    private LocalDateTime createTimeFrom;

    /**
     * 创建时间范围-结束
     */
    @Schema(description = "创建时间范围-结束")
    private LocalDateTime createTimeTo;

    /**
     * 更新时间范围-开始
     */
    @Schema(description = "更新时间范围-开始")
    private LocalDateTime updateTimeFrom;

    /**
     * 更新时间范围-结束
     */
    @Schema(description = "更新时间范围-结束")
    private LocalDateTime updateTimeTo;

    /**
     * 排序字段
     */
    @Schema(description = "排序字段")
    private String sortField;

    /**
     * 排序方向（asc/desc）
     */
    @Schema(description = "排序方向（asc/desc）")
    private String sortOrder = "desc";

    /**
     * 是否包含已删除
     */
    @Schema(description = "是否包含已删除")
    private Boolean includeDeleted = false;

    /**
     * 标签列表
     */
    @Schema(description = "标签列表")
    private List<String> tags;

    /**
     * 是否只查询我的分享
     */
    @Schema(description = "是否只查询我的分享")
    private Boolean onlyMine = false;

    /**
     * 是否只查询分享给我的
     */
    @Schema(description = "是否只查询分享给我的")
    private Boolean onlySharedToMe = false;

    /**
     * 是否只查询有效分享
     */
    @Schema(description = "是否只查询有效分享")
    private Boolean onlyValid = false;

    /**
     * 是否只查询即将过期的分享
     */
    @Schema(description = "是否只查询即将过期的分享")
    private Boolean onlyExpiringSoon = false;
}
